/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo.DAL;

import Modelo.Edificio;
import Modelo.Espacio;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import org.json.JSONObject;
import java.util.List;
import java.util.ArrayList;
import org.json.JSONArray;

/**
 *
 * @author andres
 */
public class Edificio_DAO {

    public static boolean insertarEdificio(Edificio edificio, int pisos, Espacio espacio) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        int indice = 0;
        String queryPisos = "";
        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Insertando Edificio!");
            return false;
        }
        String query = "INSERT INTO espacio(nombre_espacio, id_area, nombre_sede, tipo,descripcion,coordx,coordy)"
                + "VALUES ('"
                + espacio.getNombreEspacio()
                + "'," + espacio.getArea()
                + ",'" + espacio.getNombreSede()
                + "','" + espacio.getTipo()
                + "','" + espacio.getDescripcion()
                + "','" + espacio.getCoordx()
                + "','" + espacio.getCoordy() + "');"
                + "INSERT INTO edificio(nombre_edificio, nombre_sede, siglas)"
                + "VALUES ('"
                + edificio.getNombreEdificio()
                + "','" + edificio.getNombreSede()
                + "','" + edificio.getSiglas() + "');";
//        while (indice <= pisos) {
//            queryPisos = queryPisos + "INSERT INTO piso(id_piso,nombre_edificio,nombre_sede,ruta_plano)"
//                    + "VALUES ('"
//                    + indice
//                    + "','" + edificio.getNombreEdificio()
//                    + "','" + espacio.getNombreSede()
//                    + "','" + "style/images/Mapas/Planos/" + edificio.getSiglas() + "_0" + indice + ".png" + "');";
//            indice++;
//        }
//        query = query + queryPisos;
        System.out.println("\n\tQuery: " + query + "\n");
        try {
            s.executeUpdate(query);
            conexion.cerrarConexion();
            return true;
        } catch (SQLException se) {
            System.out.println("Error Insertando Edificio!");
            conexion.cerrarConexion();
            return false;
        }
    }

    public static List<Edificio> consultarEdificio() {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Consultando un Edificio!");
            return null;
        }
        String query = "SELECT nombre_edificio,siglas,nombre_sede FROM edificio ORDER BY nombre_edificio";
        System.out.println("\n\tQuery: " + query + "\n");
        System.out.println(query);
        List<Edificio> listaEdificios = new ArrayList<Edificio>();
        try {
            rs = s.executeQuery(query);


            /*
            Se recorre cada fila del ResultSet para instancia a cada empleado y agregarlo a la lista de empleados.
             */
            while (rs.next()) {
                /* Se instancia del nuevo Empleado. */
                Edificio tempEdificio = new Edificio(rs.getString("nombre_edificio"), rs.getString("siglas"), rs.getString("nombreSede"));
                /* Se agrega el empleado a la lista. */
                listaEdificios.add(tempEdificio);
            }
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error Consultado Edificio");
            return null;
        } finally {
            conexion.cerrarConexion();
        }
        //return listaSedes.toArray(new Sede[listaSedes.size()]);
        return listaEdificios;
    }

    public JSONArray consultarEdificioPiso(String query) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Consultando Edificios!");
            return null;
        }
        System.out.println(query);
        try {
            rs = s.executeQuery(query);

            conexion.session.setHoldability(rs.HOLD_CURSORS_OVER_COMMIT);
            JSONArray edificios = new JSONArray();
            try {
                int i = 0;
                while (rs.next()) {
                    JSONObject edificio = new JSONObject();
                    edificio.put("nombre", rs.getString(1));
                    edificio.put("area", rs.getString(2));
                    edificio.put("sede", rs.getString(3));
                    edificio.put("siglas", rs.getString(4));
                    edificio.put("piso", rs.getString(5));
                    edificio.put("ruta", rs.getString(6));
                    //edificio.put("descripcion", rs.getString(7));
                    edificio.put("tam", rs.getString(7));
                    edificios.put(i, edificio);
                    i++;
                }
            } catch (Exception e) {
            }
            return edificios;
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error Consultado el edificios");
            return null;
        }
    }

    public JSONArray consultarEdificioTabla(String query) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Consultando Edificios!");
            return null;
        }
        System.out.println(query);
        try {
            rs = s.executeQuery(query);

            conexion.session.setHoldability(rs.HOLD_CURSORS_OVER_COMMIT);
            JSONArray edificios = new JSONArray();
            try {
                int i = 0;
                while (rs.next()) {
                    JSONObject edificio = new JSONObject();
                    edificio.put("nombre", rs.getString(1));
                    edificio.put("siglas", rs.getString(2));
                    edificio.put("area", rs.getString(4));
                    edificio.put("sede", rs.getString(3));
                    edificio.put("tam", rs.getString(5));
                    edificios.put(i, edificio);
                    i++;
                }
            } catch (Exception e) {
            }
            return edificios;
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error Consultado el edificios");
            return null;
        }
    }
    // Consulta los pisos existentes en un edificio
    public static JSONObject consultarPisos(String edificio, String sede) {
        ConexionBD conex = new ConexionBD();
        JSONObject pisos = new JSONObject();

        try {
            Statement st = (Statement) conex.session.createStatement();
            String query = "SELECT p.id_piso FROM piso p, edificio e where "
                    + "p.nombre_edificio = e.nombre_edificio and p.nombre_edificio ='" 
                    + edificio + "' and e.nombre_sede = '" + sede + "' order by p.id_piso DESC";
            ResultSet rs = st.executeQuery(query);
            int i = 0;
            while (rs.next()) {
                JSONObject piso = new JSONObject();
                String floor = rs.getString(1);
                if (floor.equals("0")) {
                    floor = "PB";
                }
                piso.put("id_piso", floor);
                pisos.put("" + i++, piso);
            }
        } catch (Exception e) {
        } finally {
            conex.cerrarConexion();
        }
        return pisos;
    }

     public static JSONObject consultarPisosModReporte(String id) {
        ConexionBD conex = new ConexionBD();
        JSONObject pisos = new JSONObject();

        try {
            Statement st = (Statement) conex.session.createStatement();
            String query = "SELECT id_piso FROM ocurre_novedad_piso where id_reporte_novedad =" + id;
            ResultSet rs = st.executeQuery(query);
            int j = 0;
            while (rs.next()) {
                JSONObject piso = new JSONObject();
                String floor = rs.getString(1);
                if (floor.equals("0")) {
                    floor = "PB";
                }
                piso.put("id_piso", floor);
                pisos.put("" + j++, piso);
            }
        } catch (Exception e) {
        } finally {
            conex.cerrarConexion();
        }
        return pisos;
    }

    // Consulta los cubiculos existentes en un edificio
    public static JSONObject consultarCubs(String edificio) {
        ConexionBD conex = new ConexionBD();
        JSONObject pisos = new JSONObject();

        try {
            Statement st = (Statement) conex.session.createStatement();

            ResultSet rs = st.executeQuery("SELECT id_piso,id_cubiculo FROM cubiculo where nombre_edificio ='" + edificio + "'");
            int i = 0;
            while (rs.next()) {
                JSONObject piso = new JSONObject();
                String floor = rs.getString(1);
                if (floor.equals("0")) {
                    floor = "PB";
                }
                piso.put("id_piso", floor);
                piso.put("id_cubiculo", rs.getString(2));
                pisos.put("" + i++, piso);
            }
        } catch (Exception e) {
        } finally {
            conex.cerrarConexion();
        }
        return pisos;
    }

    public static boolean edificioExiste(String nombre) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Estableciendo conexion Revisar Edificio! " + se.getMessage());
            return false;
        }

        String query = "SELECT * FROM edificio "
                + "WHERE nombre_edificio = '" + nombre + "';";

        System.out.println(query);
        try {
            rs = s.executeQuery(query);
            if (rs.next()) {
                return true;
            } else {
                return false;
            }
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error al consultar existencia de un Edificio");
            return false;
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
        }
    }

    public static boolean actualizarEdificio(Edificio ed, Espacio espacio) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error actualizando el edificio!");
            return false;
        }

        String query = "UPDATE espacio set ";
        if (!ed.getNombreEdificio().equals("")) {
            query += "nombre_espacio = '" + ed.getNombreEdificio()  +"'";
        }
        if (!espacio.getArea().equals("")) {
            query += ",id_area = '" + espacio.getArea() + "' ";
        }
        if (!espacio.getNombreSede().equals("")) {
            query += ",nombre_sede = '" + espacio.getNombreSede() + "' ";
        }
        if (!ed.getNombreEdificio().equals("")) {
            query += ",descripcion = '" + ed.getNombreEdificio() + "' ";
        }
        if (!espacio.getCoordx().equals("")) {
            query += ",coordx = '" + espacio.getCoordx() + "' ";
        }
        if (!espacio.getCoordy().equals("")) {
            query += ",coordy = '" + espacio.getCoordy() + "' ";
        }
        query += " where nombre_espacio = '" + espacio.getNombreEspacio() + "';";
        
        query += "UPDATE edificio set ";
        if (!ed.getNombreEdificio().equals("")) {
            query += "nombre_edificio = '" + ed.getNombreEdificio()  +"'";
        }
        if (!ed.getSiglas().equals("")) {
            query += ",siglas = '" + ed.getSiglas() + "' ";
        }
        if (!ed.getNombreSede().equals("")) {
            query += ",nombre_sede = '" + ed.getNombreSede() + "' ";
        }
        query += " where nombre_edificio = '" + espacio.getNombreEspacio() + "';";
        
        System.out.println("QUERY DE MODIFICACION " + query);
        try {
            s.executeUpdate(query);
            return true;
        } catch (SQLException se) {
            System.out.println("Error al actualizar edificio! "+se.getMessage() );
            return false;
        }
    }

     public static boolean desactivarEdificio(String nombreEdificio) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error desactivando Edificio!");
            return false;
        }
        String query = "UPDATE edificio set estado_edificio = 'off' where nombre_edificio = '" + nombreEdificio + "';";
        System.out.println(query);
        try {
            s.executeUpdate(query);
            return true;
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error al desactivar edificio");
            return false;
        }
    }
}
